package top.urim;

import org.junit.jupiter.api.Test;
import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.net.URL;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void node(NodeList list){
        //遍历一下子
        for (int i = 0; i <list.getLength() ; i++) {
            Node node = list.item(i);
            System.out.println(node.getNodeName());
            //包含此节点的所有子节点的 NodeList
            NodeList childNodes = node.getChildNodes();
            //遍历根节点内所有节点(该解释不是在解释代码的作用，是在解释这代码到底干了什么)
            for (int j = 0; j <childNodes.getLength() ; j++) {
                if (childNodes.item(j).getNodeType()==Node.ELEMENT_NODE) {
                    //获得节点属性
                    NamedNodeMap nnm=childNodes.item(j).getAttributes();
                    //遍历节点属性并打印
                    for (int k= 0; k<nnm.getLength() ; k++) {
                        System.out.print(nnm.item(k).getNodeName()+":");
                        System.out.println(nnm.item(k).getNodeValue());
                    }
                    //遍历节点名称并打印节点内文本
                    System.out.print(childNodes.item(j).getNodeName() + ":");
                    //此属性返回此节点及其后代的文本内容。
                    System.out.println(childNodes.item(j).getTextContent());
                }
            }
        }
    }

    public static void main(String[] args) {
        //1.创建DocumentBuilderFactory对
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            //2.创建DocumentBuilder对象
            DocumentBuilder builder = factory.newDocumentBuilder();
            //3.获得xml文件输入流
            InputStream url=App.class.getClassLoader().getResourceAsStream("test.xml");
            //4.解析xml文件 获得Document对象
            Document doc = builder.parse(url);
            //官方解释：按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。
            NodeList sList = doc.getElementsByTagName("testg");
            node(sList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
